﻿using AppForm_Managers.Object_Entities;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace AppForm_Managers.Views
{
    public partial class QualificationForm : Form
    {
        public QualificationForm()
        {
            InitializeComponent();
        }

        private void QualificationForm_Load(object sender, EventArgs e)
        {
            ErrorProvider.Dispose();
            GridQualifications_Load(sender, e);
        }

        private void GridQualifications_Load(object sender, EventArgs e)
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                GridQualifications.DataSource = db.Qualifications.ToList();
            }
        }

        private void Controls_Reset()
        {
            CodeText.Text = "";
            NameText.Text = "";
            DescriptionText.Text = "";
            LevelText.Text = "";
            CheckStatus.Checked = false;
        }

        private void ViewQualifications_Click(object sender, EventArgs e)
        {
            ErrorProvider.Dispose();

            List<int> listSelected = ViewQualifications.GetSelectedRows().ToList<int>();
            int index = -1;
            foreach (var item in listSelected)
            {
                if (item > -1)
                {
                    index = item;
                    break;
                }
            }

            if (index > -1)
            {
                UpdateButton.Enabled = true;
                DeleteButton.Enabled = true;
                AddButton.Enabled = false;

                CodeText.Text = ViewQualifications.GetRowCellValue(index, "CodeOfQua").ToString();
                NameText.Text = ViewQualifications.GetRowCellValue(index, "NameOfQua").ToString();
                DescriptionText.Text = ViewQualifications.GetRowCellValue(index, "Descriptons").ToString();
                LevelText.Text = ViewQualifications.GetRowCellValue(index, "LevelQua").ToString();
                CheckStatus.Checked = bool.Parse(ViewQualifications.GetRowCellValue(index, "StatusOfQua").ToString());
            }
        }

        private void AddButton_Click(object sender, EventArgs e)
        {
            ErrorProvider.Dispose();

            if (CodeText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(CodeText, "Mã trình độ chuyên môn không được để trống.");
                CodeText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();
            if (NameText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(NameText, "Tên trình độ chuyên môn không được để trống.");
                NameText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();
            if (DescriptionText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(DescriptionText, "Mô tả của trình độ chuyên môn không được để trống.");
                DescriptionText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                try
                {
                    Qualification qualification = new Qualification()
                    {
                        CodeOfQua = CodeText.Text.Trim(),
                        NameOfQua = NameText.Text.Trim(),
                        Descriptons = DescriptionText.Text.Trim(),
                        LevelQua = int.Parse(LevelText.Text.Trim()),
                        StatusOfQua = CheckStatus.Checked,
                    };

                    db.Qualifications.Add(qualification);

                    DialogResult show = MessageBox.Show("Bạn có muốn thêm mới trình độ chuyên môn này không?", "Thêm mới trình độ chuyên môn", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (show == DialogResult.Yes)
                    {
                        db.SaveChanges();
                        Controls_Reset();

                        GridQualifications_Load(sender, e);
                        AlertControl.Show(this, "Hệ thống thông báo", "Thêm mới thành công trình độ chuyên môn");
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("Hệ thống đang bận, hãy thử lại sau", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
            }
        }

        private void UpdateButton_Click(object sender, EventArgs e)
        {
            ErrorProvider.Dispose();


            List<int> listSelected = ViewQualifications.GetSelectedRows().ToList<int>();
            int index = -1;
            foreach (var item in listSelected)
            {
                if (item > -1)
                {
                    index = item;
                    break;
                }
            }

            if (CodeText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(CodeText, "Mã trình độ chuyên môn không được để trống.");
                CodeText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();
            if (NameText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(NameText, "Tên trình độ chuyên môn không được để trống.");
                NameText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();
            if (DescriptionText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(DescriptionText, "Mô tả của trình độ chuyên môn không được để trống.");
                DescriptionText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();


            if (index > -1)
            {
                try
                {
                    int id = Int32.Parse(ViewQualifications.GetRowCellValue(index, "QuaID").ToString());

                    using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                    {
                        Qualification qua = db.Qualifications.Single(p => p.QuaID == id);

                        qua.CodeOfQua = CodeText.Text.Trim();
                        qua.NameOfQua = NameText.Text.Trim();
                        qua.Descriptons = DescriptionText.Text.Trim();
                        qua.LevelQua = Int32.Parse(LevelText.Text.Trim());
                        qua.StatusOfQua = Boolean.Parse(CheckStatus.Checked.ToString());


                        DialogResult show = MessageBox.Show("Bạn có muốn cập nhật trình độ chuyên môn này không?", "Cập nhật trình độ chuyên môn", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        if (show == DialogResult.Yes)
                        {
                            db.SaveChanges();

                            Controls_Reset();
                            GridQualifications_Load(sender, e);

                            AddButton.Enabled = true;
                            UpdateButton.Enabled = false;
                            DeleteButton.Enabled = false;

                            AlertControl.Show(this, "Hệ thống thông báo", "Cập nhật thành công trình độ chuyên môn");
                        }
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("Hệ thống đang bận, hãy thử lại sau", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
            }
        }

        private void DeleteButton_Click(object sender, EventArgs e)
        {
            List<int> listSelected = ViewQualifications.GetSelectedRows().ToList<int>();
            int index = -1;
            foreach (var item in listSelected)
            {
                if (item > -1)
                {
                    index = item;
                    break;
                }
            }

            if (index > -1)
            {
                try
                {
                    int id = Int32.Parse(ViewQualifications.GetRowCellValue(index, "QuaID").ToString());

                    using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                    {
                        Qualification qua = db.Qualifications.Single(p => p.QuaID == id);
                        db.Qualifications.Remove(qua);

                        DialogResult show = MessageBox.Show("Bạn có muốn xóa trình độ chuyên môn này không?", "Xóa trình độ chuyên môn", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                        if (show == DialogResult.Yes)
                        {
                            db.SaveChanges();

                            Controls_Reset();
                            GridQualifications_Load(sender, e);

                            AddButton.Enabled = true;
                            UpdateButton.Enabled = false;
                            DeleteButton.Enabled = false;
                            AlertControl.Show(this, "Hệ thống thông báo", "Xóa thành công trình độ chuyên môn");
                        }
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("Hệ thống đang bận, hãy thử lại sau", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
            }
        }

        private void CancelsButton_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn muốn hủy bỏ thao tác và làm mới", "Hủy bỏ thao tác", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
            {
                GridQualifications_Load(sender, e);
                Controls_Reset();
                AddButton.Enabled = true;
                UpdateButton.Enabled = false;
                DeleteButton.Enabled = false;
            }
        }
    }
}